package dryven.view.engine.component.metadata;

import dryven.view.engine.component.ViewComponent;
import dryven.view.engine.expression.ViewDataDeclaration;
import dryven.view.engine.expression.nodelisters.ExpressionNodeFactory;
import dryven.view.engine.parser.CompilationException;
import dryven.view.engine.parser.ViewComponentLocator;
import dryven.view.engine.parser.ViewDataDeclarationCollection;
import dryven.view.engine.parser.componentinvocation.AttributeBindings;

public interface ViewComponentMetaDataStrategy {
	/**
	 * 
	 * @return null means no child zones allowed
	 * @return An array with the names of the child zones that can be rendered inside this component
	 */
	public Iterable<String> getChildZonesForComponent();
	public Iterable<ViewDataDeclaration> getImplicitDeclarationsForChildZone(ExpressionNodeFactory factory, String name, AttributeBindings attributeBindings);
	public Iterable<AttributeDeclaration> getAttributeDeclarations();
	public ViewComponent getComponentInstance();
	public void compile(ViewDataDeclarationCollection declarations, ViewComponentLocator locator) throws CompilationException;
	public String getComponentName();
}
